//
//  BleDevice.h
//  bleDemo
//
//  Created by zt on 2020/4/13.
//  Copyright © 2020 XB. All rights reserved.
//
/*
 蓝牙外设
 */

#import <Foundation/Foundation.h>
#import <CoreBluetooth/CoreBluetooth.h>
@class BleDevice;

typedef NS_ENUM(int, BleDisconnectMode) {
    BleDisconnectModeManual         ,        //手动断开
    BleDisconnectModeTimeout        ,        //超时断开（新增通讯10秒无响应断开）
    BleDisconnectModePoweredOff     ,        //关闭蓝牙
};

NS_ASSUME_NONNULL_BEGIN

@protocol BleDeviceDelegate <NSObject>
@optional

/// 可以订阅的通道通常有几个
/// 可以写入的通道通常有几个


/// 蓝牙设备连接的时间 默认10秒
- (NSTimeInterval)deviceConnectTimeInterval;

/// 蓝牙连接的次数 默认一次
- (int)numberOfconnentCounts;

/// 设备连接完成，若无错误则连接成功
/// @param device 连接的设备
- (void)deviceDidConnected:(BleDevice *)device;

/// 设备已断开连接  初次连接超时也会走这个回调方法
/// @param device 连接的设备
/// @param mode 断开类型
- (void)device:(BleDevice *)device didDisconnectedWithMode:(BleDisconnectMode)mode;

// 小白  这里要不要增加 过滤的服务呢？
- (void)device:(BleDevice *)manager filterServices:(NSMutableArray <CBUUID *> *)services;

/// //成功接收新数据
/// @param device 成功接收到数据
/// @param data 接收到的数据
- (void)device:(BleDevice *)device didUpdateData:(NSData *)data;

/// 已经发送数据
/// @param device 连接的设备
/// @param data 接收的数据
- (void)device:(BleDevice *)device didSendData:(NSData *)data;

/// 数据发送失败
/// @param device 连接的设备
/// @param data 发送的数据
/// @param count 连续失败的次数
- (void)device:(BleDevice *)device didFailedSend:(NSData *)data count:(NSUInteger)count;

@end

@interface BleDevice : NSObject <CBPeripheralDelegate, BleDeviceDelegate>

// 需要过滤的服务
@property (nonatomic, strong) NSMutableArray *filterServices;
/// 外设名称
@property (nonatomic, copy,   readonly)   NSString *name;
/// 外设信号
@property (nonatomic, strong, readonly)   NSNumber *RSSI;
/// 外设的广播包
@property (nonatomic, copy,   readonly)   NSDictionary *advertisementData;
/// 用户连接的外设
@property (nonatomic, copy,   readonly)   CBPeripheral *peripheral;
/// 代理
@property (nonatomic, weak) id <BleDeviceDelegate> delegate;
/// 是否连接
@property (nonatomic, readonly) BOOL connected;
/// 蓝牙连接次数
@property (nonatomic, readonly) int connectCount;
/// 是否正在连接 如果connecting  connected 同YES 表示重连
@property (nonatomic, readonly) BOOL connecting;


/// 连接设备
- (void)connect;
/// 断开连接
- (void)disconnect;
/// 清除当前所有发送指令
- (void)clearSend;
/// 发送数据
- (void)sendData:(NSData *)data;

@end




NS_ASSUME_NONNULL_END
